package com.kpx.app.configs;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.TextUtils;
import android.widget.EditText;


/**
 * 字符串操作工具类
 * 
 * @author 罗文忠
 * @version 1.0
 * @date 2013-7-27
 * 
 */
public class StringUtil {

	/**
	 * 转换成千进制.
	 * 
	 * @param number
	 *        原数.
	 * @return
	 * @version 1.0
	 * @createTime 2014年1月20日,下午5:44:05
	 * @updateTime 2014年1月20日,下午5:44:05
	 * @createAuthor paladin
	 * @updateAuthor paladin
	 * @updateInfo
	 */
	public static String getThousandSystem(String number) {
		DecimalFormat df = new DecimalFormat("###,###,###,###");
		return df.format(Integer.valueOf(number));
	}

	/**
	 * 生成带*的字符串
	 *
	 * @version 1.0
	 * @createTime 2014-4-4,下午2:33:52
	 * @updateTime 2014-4-4,下午2:33:52
	 * @createAuthor liujingguo
	 * @updateAuthor liujingguo
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 *
	 * @param oldstr
	 *        字符串
	 * @param start_num
	 *        前面保留的元字符串位数
	 * @param end_num
	 *        后面保留的元字符串位数
	 * @param length
	 *        字符串最小长度
	 * @return
	 */
	public static String changeString(String oldstr, int start_num, int end_num, int length) {
		if (oldstr.length() > length) {
			String newstr = oldstr.substring(0, start_num);
			for (int i = 0; i < oldstr.length() - (start_num + end_num); i++) {
				newstr += "*";
			}
			newstr += oldstr.substring(oldstr.length() - end_num, oldstr.length());
			return newstr;
		} else {
			return oldstr;
		}

	}

	/**
	 * 转换成千进制.
	 * 
	 * @param number
	 *        原数.
	 * @return
	 * @version 1.0
	 * @createTime 2014年1月20日,下午5:44:05
	 * @updateTime 2014年1月20日,下午5:44:05
	 * @createAuthor paladin
	 * @updateAuthor paladin
	 * @updateInfo
	 */
	public static String getThousandSystem(int number) {
		DecimalFormat df = new DecimalFormat("###,###,###,###");
		return df.format(number);
	}

	/**
	 * 生成带颜色字体
	 * 
	 * @version 1.0
	 * @createTime 2013-8-1,下午5:45:05
	 * @updateTime 2013-8-1,下午5:45:05
	 * @createAuthor 罗文忠
	 * @updateAuthor 罗文忠
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param text
	 *        需要处理的文本
	 * @param color
	 *        文本颜色 rgb #ffffff
	 * @return 处理后的html格式文本
	 */
	public static String makeColorText(String text, String color) {

		return "<font color=" + color + ">" + text + "</font>";
	}

	/**
	 * 生成大号字体
	 * 
	 * @version 1.0
	 * @createTime 2013-8-1,下午5:45:05
	 * @updateTime 2013-8-1,下午5:45:05
	 * @createAuthor 罗文忠
	 * @updateAuthor 罗文忠
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param text
	 *        需要处理的文本
	 * @return 处理后的html格式文本
	 */
	public static String makeBigText(String text, int size) {
		String htmlStart = "<font >";
		String htmlEnd = "</font >";
		for (int i = 0; i < size; i++) {
			htmlStart += "<big>";
			htmlEnd = "</big>" + htmlEnd;
		}
		return htmlStart + text + htmlEnd;
	}

	/**
	 * 生成大号带颜色字体
	 * 
	 * @version 1.0
	 * @createTime 2013-8-1,下午5:45:05
	 * @updateTime 2013-8-1,下午5:45:05
	 * @createAuthor 罗文忠
	 * @updateAuthor 罗文忠
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param text
	 *        需要处理的文本
	 * @param color
	 *        文本颜色 rgb #ffffff
	 * @return 处理后的html格式文本
	 */
	public static String makeBigColorText(String text, String color) {

		return "<font color=" + color + "><big>" + text + "</big></font>";
	}

	/**
	 * 获取本地私有文件路径
	 * 
	 * @version 1.0
	 * @createTime 2013-11-16,下午9:50:49
	 * @updateTime 2013-11-16,下午9:50:49
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param parent
	 *        父文件夹
	 * @param netPath
	 *        图片网络路径
	 * @return 本地文件存储绝对路径
	 */
	public static String getUserLocalImagePath(String parent, String netPath) {
		if (TextUtils.isEmpty(netPath)) {
			return "";
		}
		return parent + netPath.substring(netPath.lastIndexOf("/") + 1);
	}

	/**
	 * 获取网络文件在本地缓存的路径
	 * 
	 * @version 1.0
	 * @createTime 2013-11-3,下午1:57:32
	 * @updateTime 2013-11-3,下午1:57:32
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param netPath
	 *        网络文件路径
	 * @param localParentPath
	 *        本地文件缓存目录
	 * @return 本地缓存文件的绝对路径
	 */
	public static String getLocalCachePath(String netPath, String localParentPath) {
		return localParentPath + netPath.substring(netPath.lastIndexOf("/") + 1);
	}

	/**
	 * 判断参数.
	 * 
	 * @param params
	 *        需要判断的字符串.
	 * @return 若为空则返回空字符串,否则返回原字符串.
	 * @version 1.0
	 * @createTime 2013年11月1日,下午12:01:50
	 * @updateTime 2013年11月1日,下午12:01:50
	 * @createAuthor paladin
	 * @updateAuthor paladin
	 * @updateInfo
	 */
	public static String getParamsForString(String params) {
		if (null == params) {
			return "";
		} else {
			return params;
		}
	}

	/**
	 * 判断参数.
	 * 
	 * @param params
	 *        需要判断的字符串.
	 * @return 若为空则返回0字符串,否则返回原字符串.
	 * @version 1.0
	 * @createTime 2013年11月1日,下午12:01:50
	 * @updateTime 2013年11月1日,下午12:01:50
	 * @createAuthor paladin
	 * @updateAuthor paladin
	 * @updateInfo
	 */
	public static String getParamsForNumber(String params) {
		if (TextUtils.isEmpty(params)) {
			return "0";
		} else {
			return params;
		}
	}

	/**
	 * 格式化文件大小
	 * 
	 * @version 1.0
	 * @createTime 2013-7-27,下午4:06:54
	 * @updateTime 2013-7-27,下午4:06:54
	 * @createAuthor 罗文忠
	 * @updateAuthor 罗文忠
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param size
	 */
	public static String formatFileSize(float size) {
		DecimalFormat format = new DecimalFormat("###,###,##0.00");
		if (size < 1024) {
			format.applyPattern("###,###,##0.00B");
		} else if (size >= 1024 && size < 1024 * 1024) {
			size /= 1024;
			format.applyPattern("###,###,##0.00KB");
		} else if (size >= 1024 * 1024 && size < 1024 * 1024 * 1024) {
			size /= (1024 * 1024);
			format.applyPattern("###,###,##0.00MB");
		} else if (size >= 1024 * 1024 * 1024 && size < 1024 * 1024 * 1024 * 1024) {
			size /= (1024 * 1024 * 1024);
			format.applyPattern("###,###,##0.00GB");
		} else if (size >= 1024 * 1024 * 1024 * 1024 && size < 1024 * 1024 * 1024 * 1024 * 1024) {
			size /= (1024 * 1024 * 1024 * 1024);
			format.applyPattern("###,###,##0.00GB");
		}
		return format.format(size);
	}



	/**
	 * 计算声音时长
	 *
	 * @version 1.0
	 * @createTime 2014年7月22日,下午4:35:30
	 * @updateTime 2014年7月22日,下午4:35:30
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 *
	 * @param time
	 *        需要计算的时间长度long格式
	 * @return
	 */
	public static String caculateSoundTime(String time) {
		if (TextUtils.isEmpty(time)) {
			return "";
		}
		String timeLength = "";
		if (Long.parseLong(time) / 1000 / 60 > 0) {
			timeLength += (Long.parseLong(time) / 1000 / 60) + "'";
		}
		timeLength += (Long.parseLong(time) / 1000 % 60) + "\"";

		return timeLength;
	}

	/**
	 * 格式化时间
	 * 
	 * @version 1.0
	 * @createTime 2013-11-18,下午9:06:13
	 * @updateTime 2013-11-18,下午9:06:13
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param time
	 *        原始时间啊， 格式 yyyy-MM-dd hh:mm:ss
	 * @param pattern
	 *        新时间格式
	 * @return
	 */
	public static String formatTime(String time, String pattern) {

		if (TextUtils.isEmpty(time)) {
			return "1970-01-01";
		}
		String newTime = "";
		try {
			Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);
			long timeMillis = date.getTime();
			newTime = new SimpleDateFormat(pattern).format(timeMillis);

		} catch (ParseException e) {
			newTime = time;
			e.printStackTrace();
		}

		return newTime;
	}

	/**
	 * 比较时间
	 * 
	 * @version 1.0
	 * @createTime 2013-11-22,下午5:23:41
	 * @updateTime 2013-11-22,下午5:23:41
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param time1
	 *        时间1（格式 yyyy-MM-dd HH:mm:ss）
	 * @param time2
	 *        时间2（格式 yyyy-MM-dd HH:mm:ss）
	 * @return 1(time1 > time2) 、 0(time1 == time2) 、 -1(除1，0的情况，都会返回-1)
	 */
	public static int compareTime(String time1, String time2) {
		int status = -1;
		Date date1;
		try {
			date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time1);
			Date date2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time2);
			long timeMillis1 = date1.getTime();
			long timeMillis2 = date2.getTime();

			if (timeMillis1 == timeMillis2) {
				status = 0;
			} else if (timeMillis1 > timeMillis2) {
				status = 1;
			} else {
				status = -1;
			}
		} catch (ParseException e) {
			e.printStackTrace();
			status = -1;
		}

		return status;
	}

	/**
	 * 格式化时间
	 * 
	 * @version 1.0
	 * @createTime 2013-11-15,下午11:23:18
	 * @updateTime 2013-11-15,下午11:23:18
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param timeMillis
	 *        时间戳
	 * @param pattern
	 *        时间正则
	 * @return 返回格式后的时间
	 */
	public static String formatTime(long timeMillis, String pattern) {

		SimpleDateFormat sdf = new SimpleDateFormat(pattern);

		return sdf.format(new Date(timeMillis));
	}

	/**
	 * 更改时间格式
	 * 
	 * @version 1.0
	 * @createTime 2014年1月3日,下午2:08:33
	 * @updateTime 2014年1月3日,下午2:08:33
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param time
	 *        原时间
	 * @param fromPattern
	 *        原始格式
	 * @param toPattern
	 *        目标格式
	 * @return 格式化之后的
	 */
	public static String changeTimeFormat(String time, String fromPattern, String toPattern) {

		Date date = null;
		SimpleDateFormat sdf = new SimpleDateFormat(toPattern);
		try {
			date = new SimpleDateFormat(fromPattern).parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return sdf.format(date);
	}

	/**
	 * 获取指定时间格式的时间戳
	 * 
	 * @version 1.0
	 * @createTime 2014年1月3日,下午1:55:49
	 * @updateTime 2014年1月3日,下午1:55:49
	 * @createAuthor CodeApe
	 * @updateAuthor CodeApe
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param time
	 *        时间
	 * @param pattern
	 *        格式
	 * @return
	 */
	public static long getTimeMillis(String time, String pattern) {

		Date date = null;
		try {
			date = new SimpleDateFormat(pattern).parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
			return 0;
		}
		return date.getTime();
	}

	/**
	 * 判断字符串是否是标准时间格式
	 * 
	 * @version 1.0
	 * @createTime 2014-3-25,下午7:46:25
	 * @updateTime 2014-3-25,下午7:46:25
	 * @createAuthor liujingguo
	 * @updateAuthor liujingguo
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * 
	 * @param time
	 *        判断的字符串
	 * @param fromPattern
	 *        时间格式
	 * @return 是返回true，不是返回false
	 */
	public static boolean valueTime(String time, String fromPattern) {

		try {
			new SimpleDateFormat(fromPattern).parse(time);
			return true;
		} catch (ParseException e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 描述：获取EditText控件所输入的文字 并去除空字符
	 * 
	 * @version 1.0
	 * @createTime 2014-4-21 上午10:50:04
	 * @updateTime 2014-4-21 上午10:50:04
	 * @createAuthor XinGo
	 * @updateAuthor
	 * @param editTextInput
	 *        要获取文本内容的edittext控件
	 * @updateInfo (修改内容描述)
	 */
	public static String trimEditTextInput(EditText editTextInput) {
		return editTextInput.getText().toString().trim();
	}

	/**
	 * 字符串转换整形,
	 *
	 * @version 1.0
	 * @createTime 2014年9月2日,下午6:16:12
	 * @updateTime 2014年9月2日,下午6:16:12
	 * @createAuthor WangYuWen
	 * @updateAuthor WangYuWen
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 *
	 * @param str
	 *        字符串
	 * @return 空返回0
	 */
	public static int StringToInt(String str) {
		if (TextUtils.isEmpty(str)) {
			return 0;
		} else {
			return Integer.parseInt(str);
		}
	}

	/**
	 * 获取手机的mac地址
	 *
	 * @version 1.0
	 * @createTime 2014年11月13日,下午9:29:34
	 * @updateTime 2014年11月13日,下午9:29:34
	 * @createAuthor WangYuWen
	 * @updateAuthor WangYuWen
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 *
	 * @param context
	 * @return
	 */
	public static String getMacAddress(Context context) {
		// 获取mac地址：
		String macAddress = "000000000000";
		try {
			WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
			WifiInfo info = (null == wifiMgr ? null : wifiMgr.getConnectionInfo());
			if (null != info) {
				if (!TextUtils.isEmpty(info.getMacAddress()))
					macAddress = info.getMacAddress().replace(":", "");
				else
					return macAddress;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return macAddress;
		}
		return macAddress;
	}

	/**
	 * 判断字段长度（中文2个字符，英文1个字符）的方法
	 * 
	 * 
	 * @version 1.0
	 * @createTime 2015年4月6日,下午6:38:23
	 * @updateTime 2015年4月6日,下午6:38:23
	 * @createAuthor
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param value
	 * @return
	 */
	public static int getHaveChineseLength(String value) {
		int valueLength = 0;
		String chinese = "[\u4e00-\u9fa5]";
		for (int i = 0; i < value.length(); i++) {
			String temp = value.substring(i, i + 1);
			if (temp.matches(chinese)) {
				valueLength += 2;
			} else {
				valueLength += 1;
			}
		}
		return valueLength;
	}

	/***
	 * 验证生日
	 * 
	 * @version 1.0
	 * @createTime 2015年3月16日,下午4:32:07
	 * @updateTime 2015年3月16日,下午4:32:07
	 * @createAuthor zhou wan
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param time
	 * @return
	 */
	public static boolean checkBirth(String time) {
		if (valueTime(time, "yyyyMMdd") && time.length() == 8) {
			String date = time.substring(0, 4);
			date += "-";
			date += time.substring(4, 6);
			date += "-";
			date += time.substring(6, 8);
			// LogUtil.out("date===="+date);
			String datePattern1 = "\\d{4}-\\d{2}-\\d{2}";
			String datePattern2 = "^((\\d{2}(([02468][048])|([13579][26]))"
					+ "[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|"
					+ "(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?"
					+ "((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?("
					+ "(((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?"
					+ "((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";
			Pattern pattern = Pattern.compile(datePattern1);
			Matcher match = pattern.matcher(date);
			if (match.matches()) {
				pattern = Pattern.compile(datePattern2);
				match = pattern.matcher(date);
				return match.matches();
			} else {
				return false;
			}
		} else {
			return false;
		}

	}

	/**
	 * 验证身份证号码
	 * 
	 * @version 1.0
	 * @createTime 2015年3月16日,下午4:35:03
	 * @updateTime 2015年3月16日,下午4:35:03
	 * @createAuthor zhou wan
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param idcard
	 * @return
	 */
	public static boolean toJudgeInput(String idcard) {
		// boolean result = false;
		// // 定义判别用户身份证号的正则表达式（要么是15位，要么是18位，最后一位可以为字母）
		// Pattern idNumPattern = Pattern.compile("(\\d{15})|(\\d{17}[0-9Xx])");
		// // 通过Pattern获得Matcher
		// Matcher idNumMatcher = idNumPattern.matcher(idcard);
		// // 判断用户输入是否为身份证号
		// result = idNumMatcher.matches();
		// return result;

		if (idcard.length() == 15 || idcard.length() == 18) {
			return true;
		} else {
			return false;
		}

	}

	/***
	 * 字符串是否登录空
	 * 
	 * @version 1.0
	 * @createTime 2015年4月14日,下午2:00:14
	 * @updateTime 2015年4月14日,下午2:00:14
	 * @createAuthor zhou wan
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param str
	 * @return
	 */
	public static boolean isNullString(CharSequence str) {
		if (str == null || str.length() == 0 || str.equals("") || str.equals("null"))
			return true;
		else
			return false;
	}

	/**
	 * 判断字符串是否含有非法字符串和空格
	 * 
	 * 
	 * @version 1.0
	 * @createTime 2015年4月18日,上午11:55:33
	 * @updateTime 2015年4月18日,上午11:55:33
	 * @createAuthor
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param str
	 * @return true 含有 false 不含有
	 */
	public static boolean isSymbol(String str) {
		String symbol = " {}\\[]<>~!@#$%^&*()_+=-`|\"?,./;'？》《~！@#￥%……&*（）——+-=·、|*";
		for (int i = 0; i < symbol.length(); i++) {
			String string = symbol.charAt(i) + "";
			if (str.contains(string)) {
				return true;
			}
		}
		return false;

	}

	/**
	 * 是否是表情字符
	 * 
	 * 
	 * @version 1.0
	 * @createTime 2015年5月12日,上午9:20:41
	 * @updateTime 2015年5月12日,上午9:20:41
	 * @createAuthor yanzhong
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param codePoint
	 * @return
	 */
	private static boolean isEmojiCharacter(char codePoint) {
		return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
				|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
	}


	/**
	 * 过滤emoji 或者 其他非文字类型的字符
	 * 
	 * 
	 * @version 1.0
	 * @createTime 2015年5月12日,上午9:21:09
	 * @updateTime 2015年5月12日,上午9:21:09
	 * @createAuthor yanzhong
	 * @updateAuthor
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param source
	 * @return
	 */
	public static String filterEmoji(String source) {

		StringBuilder buf = null;

		int len = source.length();

		for (int i = 0; i < len; i++) {
			char codePoint = source.charAt(i);

			if (!isEmojiCharacter(codePoint)) {// 如果不包含 则将字符append
				if (buf == null) {
					buf = new StringBuilder(source.length());
				}
				buf.append(codePoint);
			} else {
			}
		}
		if (buf == null) {
			return source;// 如果没有找到 emoji表情，则返回源字符串
		} else {
			if (buf.length() == len) {// 这里的意义在于尽可能少的toString，因为会重新生成字符串
				buf = null;
				return source;
			} else {
				return buf.toString();
			}
		}

	}


	public static final String sGetAddrUrl = "http://ip-api.com/json/";


	/**
	 * 
	 * 
	 * 
	 * @version 1.0
	 * @createTime 2015年7月24日,上午10:54:08
	 * @updateTime 2015年7月24日,上午10:54:08
	 * @createAuthor yanzhongzhong
	 * @updateAuthor yanzhongzhong
	 * @updateInfo (此处输入修改内容,若无修改可不写.)
	 * @param body
	 * @param length
	 * @return
	 */
	public static String CutOutByLength(String body, int length) {
		if (body.length() >= length) {
			return body.substring(0, length - 1);
		} else {
			return body;
		}
	}


	public static String timePattern(String startTime) {
		String time ="";
		char[] a = startTime.toCharArray();
		for (int i = 0; i <a.length ; i++) {
			time+=a[i];
			switch(i){
				case 3:
					time+="/";
					break;
				case 5:
					time+="/";
					break;
				case 7:
					time+=" ";
					break;
				case 9:
					time+=":";
					break;
				case 11:
					time+=":";
					break;
			}
		}
		return time;
	}

}
